package com.giw.uima;

import org.apache.uima.analysis_component.JCasAnnotator_ImplBase;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;

import org.apache.uima.cas.Type;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.tcas.Annotation;
import com.giw.uima.PersonNameAnnotation;

public class CopyOfPersonNameAnnotator extends JCasAnnotator_ImplBase {
	private static final String POS_FEATURENAME = "posTag";

	@Override
	public void process(JCas jcas) throws AnalysisEngineProcessException {

		boolean flag = false;
		Annotation na = null;
		// Prendo tutte le Annotation
		for (Annotation annotation : jcas.getAnnotationIndex()) {

			/*
			 * Avento tutti i tipi di Annotation controllo se è un
			 * NameAnnotation se e' un NameAnnotaion mi metto da parte una copia
			 * dell'Annotation setto il flag a 1 cosi mi ricordo che sono
			 * passato da qui
			 */
			if ("com.giw.uima.NameAnnotation".equals(annotation.getType()
					.getName()) && !flag) {
				flag = true;
				na = annotation;
			} else {
				/*
				 * verifico che sia una tokenAnnotation se lo è verifico se è un
				 * verbo se è un verbo mi salvo il PersonNameAnnotation
				 */
				if ("org.apache.uima.TokenAnnotation".equals(annotation
						.getType().getName()) && flag) {
					if (isValore(annotation, "vb")
							|| isValore(annotation, "vbn")) {

						PersonNameAnnotation pna = new PersonNameAnnotation(
								jcas);
						pna.setBegin(na.getBegin());
						pna.setEnd(annotation.getBegin() - 1);
						pna.addToIndexes();
						na = null;
						flag = false;
					}
				}
			}
		}

	}

	private boolean isValore(Annotation annotation, String valore) {
		Type type = annotation.getType();
		String pos = annotation.getFeatureValueAsString(type
				.getFeatureByBaseName(POS_FEATURENAME));

		return pos != null && pos.equals(valore);
	}

}